本章要点

主题 要点
使用泛型类型 泛型类型需要一个或多个类型参数才能工作。
在声明变量时,传送需要的类型参数,就可以把泛型类型用作变量的类型。为此,应把逗号分隔的类型名列表放在尖括号中
可空类型 可空类型可使用指定类型的任意值或null值。
使用Nullable<T>或T?语法,可以声明可空类型的变量
??运算符 空接合运算符返回第一个操作数的值,如果第一个操作数是null,就返回第二个操作数的值
泛型集合 泛型集合非常有用,因为它们内置了强类型化功能。
可使用List<T>Collection<T>Dictionary<K, V>等集合类型,它们还提供了泛型接口。为了针对泛型集合进行排序和搜索,应使用IComparer<T>IComparable<T>接口
定义泛型类 泛型类型的定义十分类似于其他类型,但在指定类型名时需要添加泛型类型参数。
与使用泛型类型一样,也需要把这些参数指定为逗号分隔的列表,并放在尖括号中。在使用类型名的地方都可以使用泛型类型参数,例如可在方法的返回值和参数中使用它们
泛型类型的参数约束 为了高效地在泛型类型代码中使用泛型类型参数,可以在使用类型时约束可以提供的类型。可以根据基类、所支持的接口、是否必须是值类型或引用类型以及是否支持无参数的构造函数等,来约束类型参数。
如果没有这些约束,就必须使用default关键字来实例化泛型类型的变量
其他泛型类型 除类之外,还可以定义泛型接口、委托和方法
变体 变体是类似于多态性的一个概念,但应用于类型参数。
它允许使用一个泛型类型替代另一个泛型类型,这些泛型类型仅在所使用的泛型类型参数上有区别。
协变允许在两种类型之间转换,其中目标类型有一个类型参数,它是源类型的类型参数的基类。
抗变允许进行相反的转换。
协变类型参数用out参数定义,只能用作返回类型和属性get访问器的类型。
抗变类型参数用in参数定义,只能用作方法的参数

🔚